home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.40
/
aprint
/
aprintv2.21.p
< prev
next >
Wrap
Text File
|
1994-12-10
|
55KB
|
1,944 lines
PROGRAM APrint; {V2.21}
{--------------------------------------------------------------------}
{ *** APrint *** USES OS3 KickPascal-Includes
© & P 1993-1994 by Falk Zühlsdorff (PackMAN)
FREEWARE: wenn nichts an Programm/Source/Anleitung verändert wird ;
folgende Files & der Icons müssen enthalten sein:
APrint, APrint.dok, Aprint.Bsp
Ideen, Spenden,Bugs an:
PackMAN
c/o Falk Zühlsdorff
Lindenberg 66
98693 Ilmenau/Thür.
}
{--------------------------------------------------------------------}
USES Reqtools,Gadtools,PrtChk,Graphics,EXECIO,APrintDruck,PButton;
{$incl 'dos.lib};
{--------------------------------------------------------------------}
CONST Last:=50; {Begrenzung für Einträge}
Kenn:='@ap2@';
dk:='APrint_V1.1_Data';
dk2:='APV2.11Data';
dk3:='@ap2D@';
up:=chr(10);
{--------------------------------------------------------------------}
TYPE
{--- Type Datenverwaltung / Druck ---}
rec = RECORD
name1,name2,Nr,Ort,Tel:STRING[36];
Kz:STRING[11];
Kzbr:cardinal;
frei:boolean;
END;
PrinterIO=Record {C: "union"-->Pascal: Record mit Variantenteil.}
Case integer Of
0: ( ios : IOStdReq );
1: ( iodrp : IODRPReq );
2: ( iopc : IOPrtCmdReq );
End;
{--- Type RTReq---}
rttxtype = string[300];
{--- Type Tags / Pointer / Screen ... ---}
helpstr = string;
VTxType = array[0..14] OF string;
TagType = array[0..5] OF TagItem;
STagsType = array[0..6] OF TagType;
CharLentype = array[0..6] OF byte;
tag_col_array = array[1..10] of integer; {not word}
Pointerfeld = array[1..40] OF Word;
CBTagType = array[0..3] OF TagItem;
{--------------------------------------------------------------------}
VAR {-- VAR Win / Scr --}
OWin : ^Window;
Prc : ^Process;
PrcH : Ptr;
Win,PWin : ^Window;
RP,PRP : ^RastPort;
PScr,Screen : p_screen; {PublicScreen}
drawinfo : p_drawinfo; {dessen Drawinfo}
txattr : TextAttr;STATIC;
font : p_textfont;
msg : ^IntuiMessage;
akt : ^Gadget;
NSTags : array[1..15] of tagitem;STATIC;
NWTags : array[1..13] of tagitem;STATIC;
NWPTags : array[1..13] OF TagItem;STATIC;
tag_col : tag_col_array;STATIC;
vi : PTR;
rr,gg,bb : array[0..3] of Integer;STATIC; {Farben}
{-- VAR Hilfe --}
i : byte;STATIC;
ex,back : boolean;STATIC;
winhelp,RT : LONG;STATIC;
kzb1,freibr : cardinal;STATIC;
ysize,rem,baseline : word;STATIC;
Wbr : integer;STATIC;
screen_modeID, ourfont,
errorcode : long;STATIC;
screenhelp : boolean;STATIC;
barheight : cardinal;STATIC;
gfx : long;STATIC;
fontname,PTitle : string;STATIC;
plus : integer;STATIC;
auto,nlq : boolean;STATIC;
cancel,allfree,
autofirst : boolean;STATIC;
Code : Byte;STATIC;
gedr1,gedr2 : boolean;STATIC;
Scrtitel : string;STATIC;
waitreq : Requester;
PointerPtr : ^Pointerfeld;
{-- VAR Gadgets --}
ng : NewGadget;STATIC;
g : array[0..33] OF p_Gadget;STATIC; {Win}
GTags : array[0..3] OF TagItem;STATIC; {B_Kind}
CTags : array[0..3] OF TagItem;STATIC; {CY_Kind}
cfeld : array[0..6] OF ^Helpstr;
CTx : array[0..4] OF string;STATIC;
cycleNrA, cycleNrB : byte;STATIC;
cyclenrC,liRa : Integer;STATIC;
VTags : array[0..4] OF TagItem;STATIC; {CY_Kind}
Vfeld : array[0..15] OF ^Helpstr; {@-VGad}
VTx : VTxType;STATIC;
CBTags : array[0..1] OF CBTagType;STATIC; {CB_Kind}
ITags : array[0..3] OF TagItem;STATIC; {IN_Kind}
BBTags : array[0..2] OF TagItem;STATIC; {BevelBox}
STx : array[0..6] OF string[70];STATIC;{ST_Kind}
STags : StagsType;STATIC;
charlen : charlentype;STATIC;
StrAkt : boolean;STATIC;
sig : ^stringinfo;
TTx : string;STATIC; {Tx_Kind}
TTags : array[0..3] OF TagItem;STATIC;
SlTags : array[0..5] OF TagItem;STATIC; {SL_Kind}
Pg : array[0..14] OF p_Gadget; {Vorein.}
pgad,glist,Ppgad,Pglist: p_Gadget;STATIC;
{--- VARs datenverwaltung ---}
ein : array[1..Last] OF rec;STATIC;
abs : array[0..4] of string[70];STATIC;
datname,Dirname,FName : string[108];STATIC;
FTags : array[0..1] of TagItem;STATIC; {RT}
RTFTags : array[0..3] of tagitem;STATIC; {RT}
firstprt : boolean;STATIC;
{--------------------------------------------------------------------}
PROCEDURE SetPoi(ThisWin:p_Window);
VAR wreq : boolean;STATIC;
BEGIN
InitRequester(^waitReq); {Req: 0*0*0*0}
wreq:=Request(^waitReq,ThisWin);
SetPointer(ThisWin,PointerPTR,16,16,-6,-1);
END;
{--------------------------------------------------------------------}
PROCEDURE ClearPoi(ThisWin:p_Window);
BEGIN
ClearPointer(ThisWin);
EndRequest(^waitReq,ThisWin);
END;
{--------------------------------------------------------------------}
PROCEDURE CloseLibs;
BEGIN
IF Gadtoolsbase<>NIL THEN CloseLib(Gadtoolsbase);
IF RTbase<>NIL THEN CloseLibrary(RTbase);
IF GFXbase<>NIL THEN CloseLib(GFXBase);
IF Intuitionbase<>NIL THEN CloseLib(Intuitionbase);
END;
{--------------------------------------------------------------------}
PROCEDURE CloseSome;
BEGIN
ScreenToBack(Screen);
CloseWindow(Win);
FreeGadgets(glist);
FreeVisualInfo(vi);
Free_Mem(Long(Pointerptr),sizeof(Pointerfeld));
screenhelp:=CloseScreen(Screen);
CloseLibs;
END;
{--------------------------------------------------------------------}
PROCEDURE Abschalten;
BEGIN
rem:=RemoveGList(Win,g[11],-1);
END;
{--------------------------------------------------------------------}
PROCEDURE Zuschalten;
BEGIN
rem:=AddGList(Win,g[11],-1,-1,NIL);
END;
{--------------------------------------------------------------------}
PROCEDURE message(lds:string);
BEGIN
TTx:=lds;
GT_SetGadgetAttrsA(g[31],WIN,NIL,^TTags[2]);
END;
{--------------------------------------------------------------------}
PROCEDURE RTFile(titel:string);
VAR FileReq : p_rtFileRequester;
req : long;STATIC;
BEGIN
cancel:=false;
FileReq:=ptr(rtAllocRequestA(RT_FileReq,Nil));
IF FileReq<>Nil
THEN
BEGIN
RTFTags[1]:=TagItem(RT_Window,Long(Win));
req:=rtChangeReqAttr(filereq,^Ftags[0]);
req:=rtFileRequestA(FileReq,FName,titel,^RTFTags[0]);
IF req<>0
THEN
BEGIN
DirName:=FileReq^.Dir;
IF (DirName<>'') AND (DirName[length(DirName)]<>':')
AND ((DirName[length(DirName)]<>'/'))
THEN datname:=DirName+'/'+Fname
ELSE datname:=DirName+Fname;
END
ELSE cancel:=true;
rtFreeRequest(FileReq);
END;
END;
{--------------------------------------------------------------------}
FUNCTION RTReqFirst(Titel,Text,gadtx:string):long;
VAR tags : array[0..6] of tagitem;STATIC;
BEGIN
Tags[0]:=TagItem(RTEZ_Reqtitle,Long(^titel));
Tags[1]:=TagItem(RTGS_GadFmt,long(^gadtx));
Tags[2]:=TagItem(RT_UnderScore,long('_'));
Tags[3]:=TagItem(RTGS_BackFill,long(false));
Tags[4]:=TagItem(RTGS_Flags,GSREQF_CENTERTEXT or
GSREQF_HIGHLIGHTTEXT);
Tags[5]:=TagItem(RT_ReqPos,ReqPos_TopLeftScr);
Tags[6].ti_tag:=Tag_END;
RTReqFirst:=rtEZRequestA(^Text,^gadtx,NIL,NIL,^Tags[0]);
END;
{--------------------------------------------------------------------}
FUNCTION RTReq(Titel:string;Text:rttxtype;gadtx:string;pos:byte):long;
VAR tags : array[0..9] of tagitem;STATIC;
BEGIN
Tags[0]:=TagItem(RTEZ_Reqtitle,Long(^titel));
Tags[1]:=TagItem(RTGS_GadFmt,long(^gadtx));
Tags[2]:=TagItem(RT_UnderScore,long('_'));
Tags[3]:=TagItem(RTGS_BackFill,long(false));
Tags[4]:=TagItem(RT_ReqPos,pos);
Tags[5]:=TagItem(RTGS_Flags,GSREQF_CENTERTEXT or
GSREQF_HIGHLIGHTTEXT);
Tags[6]:=TagItem(RT_TextAttr,long(^txattr));
Tags[7]:=TagItem(RT_Window,long(Win));
Tags[8]:=TagItem(RT_LockWindow,1);
Tags[9].ti_tag:=Tag_END;
RTReq:=rtEZRequestA(^Text,^gadtx,NIL,NIL,^Tags[0]);
END;
{--------------------------------------------------------------------}
PROCEDURE Infoline;
BEGIN
RT:=RTReq('Information',
'DAS Adreßdruckprogramm für Homeuser.'+up+up+
'FREEWARE'+up+up+'Autor:'+up+up+
'Falk Zühlsdorff'+up+'Lindenberg 66'+up+
'D-98693 Ilmenau'+up+up+
'Internet: ai036@rz.tu-ilmenau.de'+up+up+
'Grüße an:'+up+
'dopW, Janosh, Diesel, Røgersøft...'+up+up+
'Erstellt in KickPascal 2.12/OS3.1.',
'_Yho',ReqPos_CenterWin);
message(' Info gelesen.');
END;
{--------------------------------------------------------------------}
PROCEDURE HelpLine;
BEGIN
RT:=RTReq('Kurzhilfe',
'Tastaturunterstützung u.a.'+up+up+
'1..0: Adreßgadgets (linker Rand)'+up+
'X: Wahlschalter Absender'+up+
'W: Wahlschalter Adreßbereich'+up+up+
'ACHTUNG: für Tastencodes immer erst'+up+
'Stringgadgets deaktivieren.',
'_Danke',ReqPos_CenterWin);
message(' Hilfe gelesen.');
END;
{--------------------------------------------------------------------}
PROCEDURE PosTx(Nr:byte;Txbr:cardinal;Tx:string); {hä ???}
BEGIN
SetAPen(RP,0);
RectFill(RP,Wbr+3,ysize+2+(Nr*ysize*2),12*Wbr-3,
2*ysize+4+(Nr*ysize*2));
SetAPen(RP,3);
Move(RP,Wbr+ROUND((11*Wbr-Txbr)/2),
2*ysize+(Nr*ysize*2)+1+ysize-baseline+plus-1);
gfx:=_Text(RP,^Tx,Strlen(Tx));
END;
{--------------------------------------------------------------------}
PROCEDURE Setcolor(Nr,R,G,B:byte);
BEGIN
setRGB4(^Screen^.ViewPort,Nr,R,G,B);
END;
{--------------------------------------------------------------------}
PROCEDURE Grundeinstellung;
BEGIN
rr[0]:=11; gg[0]:=11; bb[0]:=11;
rr[1]:=0; gg[1]:=0; bb[1]:=0;
rr[2]:=15; gg[2]:=15; bb[2]:=15;
rr[3]:=6; gg[3]:=7; bb[3]:=13;
cycleNrC:=1;
auto:=true;
nlq:=true;
liRa:=0;
autofirst:=false;
datname:='';
Dirname:='SYS:';
Fname:='';
END;
{------------------------------------------------------------------------}
PROCEDURE loeschen;
BEGIN
FOR i:=0 TO 5 DO
STx[i]:='';
FOR i:=0 TO 5 DO
GT_SetGadgetAttrsA(g[12+i],WIN,NIL,^STags[i,3]);
END;
{------------------------------------------------------------------------}
PROCEDURE DSDel(Nr:byte);
BEGIN
ein[Nr].name1:='';
ein[Nr].name2:='';
ein[Nr].Nr:='';
ein[Nr].Ort:='';
ein[Nr].Tel:='';
ein[Nr].Kz:='';
ein[Nr].kzbr:=0;
ein[Nr].frei:=true;
END;
{------------------------------------------------------------------------}
PROCEDURE wechseln;
BEGIN
FOR i:=0 TO 9 DO
IF ein[i+1+10*cycleNrA].frei
THEN PosTx(i,freibr,'frei')
ELSE PosTx(i,ein[i+1+10*cycleNrA].kzbr,ein[i+1+10*cycleNrA].kz);
END;
{---------------------------------------------------------------------}
PROCEDURE cycleA;
BEGIN
IF gedr1 OR gedr2
THEN
IF cycleNrA=0 THEN cycleNrA:=4
ELSE DEC(cycleNrA)
ELSE
IF cycleNrA=4 THEN cycleNrA:=0
ELSE INC(cycleNrA);
CTags[0]:=TagItem(GTCY_Active,cycleNrA);
GT_SetGadgetAttrsA(g[10],WIN,NIL,^CTags[0]);
wechseln;
END;
{---------------------------------------------------------------------}
PROCEDURE cycleB;
BEGIN
sig:=g[18]^.SpecialInfo;
Abs[cycleNrB]:=sig^.buffer;
IF gedr1 OR gedr2
THEN
IF cycleNrB=0 THEN cycleNrB:=4
ELSE DEC(cycleNrB)
ELSE
IF cycleNrB=4 THEN cycleNrB:=0
ELSE INC(cycleNrB);
CTags[0]:=TagItem(GTCY_Active,cycleNrB);
GT_SetGadgetAttrsA(g[30],WIN,NIL,^CTags[0]);
STx[6]:=Abs[cycleNrB];
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
END;
{------------------------------------------------------------------------}
PROCEDURE cycleC;
BEGIN
IF gedr1 OR gedr2
THEN
IF cycleNrC=0 THEN cycleNrC:=14
ELSE DEC(cycleNrC)
ELSE
IF cycleNrC=14 THEN cycleNrC:=0
ELSE INC(cycleNrC);
VTags[0]:=TagItem(GTCY_Active,cycleNrC);
GT_SetGadgetAttrsA(g[32],WIN,NIL,^VTags[0]);
END;
{---------------------------------------------------------------------}
PROCEDURE Ausgabe(Nr:byte);
BEGIN
Stx[0]:=ein[Nr+10*cycleNrA].name1;
Stx[1]:=ein[Nr+10*cycleNrA].name2;
Stx[2]:=ein[Nr+10*cycleNrA].Nr;
Stx[3]:=ein[Nr+10*cycleNrA].Ort;
Stx[4]:=ein[Nr+10*cycleNrA].Tel;
Stx[5]:=ein[Nr+10*cycleNrA].Kz;
FOR i:=0 TO 5 DO
GT_SetGadgetAttrsA(g[12+i],WIN,NIL,^STags[i,3]);
END;
{------------------------------------------------------------------------}
PROCEDURE Uebernehmen(Nr:byte);
BEGIN
IF allfree THEN allfree:=false;
ein[Nr+10*cycleNrA].name1:=STX[0];
ein[Nr+10*cycleNrA].name2:=STX[1];
ein[Nr+10*cycleNrA].Nr:=STX[2];
ein[Nr+10*cycleNrA].Ort:=STX[3];
ein[Nr+10*cycleNrA].Tel:=STX[4];
ein[Nr+10*cycleNrA].Kz:=STX[5];
ein[Nr+10*cycleNrA].kzbr:=kzb1;
ein[Nr+10*cycleNrA].frei:=false;
PosTx(Nr-1,kzb1,STx[5]);
message(' Eintrag übernommen.');
END;
{------------------------------------------------------------------------}
PROCEDURE GetAddy;
VAR i : byte;STATIC;
BEGIN
FOR i:=12 TO 18 DO
BEGIN
sig:=g[i]^.SpecialInfo;
STx[i-12]:=sig^.buffer;
END;
Kzb1:=textlength(^Screen^.rastport,^STx[5],strlen(STx[5]));
END;
{------------------------------------------------------------------------}
PROCEDURE KopDel(yho:byte);
VAR e:boolean;STATIC;
BEGIN
IF yho=1
THEN
BEGIN
GetAddy;
IF (STx[0]='') AND (STx[1]='') AND (STx[2]='') AND (STx[3]='') AND
(STx[4]='') AND (STx[5]='')
THEN
BEGIN
message(' Sinnlos zu kopieren, Eintrag leer !!!');
EXIT;
END;
IF kzb1>10*Wbr
THEN
BEGIN
RT:=RTReq('APrint V2.21',
'KÜRZEL enthält untypische'\10'Zeichen, bitte kürzen/ändern.',
'_Gut',4);
exit;
END;
message(' Kopieren: Anwählen (1..0) / Abbruch (ESC)...');
END
ELSE
message(' Lösche Datensatz: Anwählen (1..0) / Abbruch (ESC).');
DisplayBeep(Screen);
e:=false;
Abschalten;
REPEAT
Msg:=Wait_Port(Win^.Userport);
Msg:=GT_GetIMsg(Win^.userport);
GT_ReplyIMsg(Msg);
Akt:=Msg^.IAddress;
CASE Msg^.class OF
IDCMP_MOUSEBUTTONS :
BEGIN
IF yho=1 THEN message(' Kopieren: abgebrochen...')
ELSE message(' Lösche Datensatz: abgebrochen...');
e:=true;
END;
IDCMP_GADGETUP:
CASE Akt^.GadgetID OF
0..9: IF yho=1
THEN
BEGIN
Uebernehmen(Akt^.GadgetID+1);
e:=true;
END
ELSE
BEGIN
DSDel(CycleNrA*10+Akt^.GadgetID+1);
PosTx(Akt^.GadgetID,freibr,'frei');
e:=true;
message(' Datensatz gelöscht.');
END
10: BEGIN cycleNrA:=Msg^.Code; wechseln; END;
ELSE;END;
RAWKEY:
BEGIN
Code:=Msg^.Code;
CASE (Code AND $7f) OF
$60: IF (Code AND $80)=0
THEN gedr1:=true ELSE gedr1:=false;
$61: IF (Code AND $80)=0
THEN gedr2:=true ELSE gedr2:=false;
ELSE
CASE Msg^.code OF
$11: cycleA; {W @}
$01..$0A:
IF yho=1
THEN
BEGIN Uebernehmen(long(Msg^.Code));e:=true; END
ELSE
BEGIN
DsDel(CycleNrA*10+long(Msg^.Code));
PosTx(long(Msg^.Code)-1,freibr,'frei');
e:=true;
message(' Datensatz gelöscht.');
END;
$44,
$45:
BEGIN
IF yho=1 THEN message(' Kopieren: abgebrochen...')
ELSE message(' Lösche Datensatz: abgebrochen...');
e:=true;
END;
ELSE;END;
END;
END;
ELSE;END;
UNTIL e;
Zuschalten;
END;
{---------------------------------------------------------------------}
PROCEDURE alldel;
BEGIN
IF NOT allfree
THEN
BEGIN
FOR i:=1 TO 50 DO DSDel(i);
allfree:=true;
END;
Loeschen;
FOR i:=0 TO 4 DO Abs[i]:='';
STx[6]:='';
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
cycleNrA:=4; cycleA;
cycleNrB:=4; cycleB;
END;
{---------------------------------------------------------------------}
PROCEDURE Neu;
VAR help:boolean;
BEGIN
RT:=RTReq('APrint V2.21',
'NEU: Bitte zu löschenden Bereich anwählen.',
'_Alles|_Datensatz|_Einträge|Ab_s (alle)|A_bs|_Nichts',0);
CASE RT OF
1: BEGIN
SetPoi(Win);Alldel;
message(' Alles gelöscht.');ClearPoi(Win);
END;
2: BEGIN
KopDel(0); {DS-loeschen}
help:=false;
i:=1;
REPEAT
IF ein[i].frei=false THEN help:=true;
Inc(i);
UNTIL (i=51) or (help);
IF NOT help THEN allfree:=true;
END;
3: BEGIN IF NOT allfree
THEN
BEGIN
SetPoi(Win);
FOR i:=1 TO 50 DO DSDel(i);
ClearPoi(Win);
END;
cyclenrA:=4; cycleA;
message(' Einträge gelöscht.');
allfree:=true;
END;
4: BEGIN FOR i:=0 TO 4 DO Abs[i]:=''; STx[6]:='';
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
cycleNrB:=4;cycleB;
message(' Alle Absender gelöscht.'); END;
5: BEGIN Abs[cycleNrB]:='';STx[6]:='';
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
message(' Absender gelöscht.'); END;
ELSE;END;
END;
{---------------------------------------------------------------------}
PROCEDURE Prefs;
VAR endpr : boolean;STATIC;
ru,gu,bu : array[0..3] of INTEGER;STATIC;
ActCol : byte;STATIC;
yho : boolean;STATIC;
nlqUP,autoUP: boolean;STATIC;
{--- UP Prefs ---}
PROCEDURE SetNumb(Nr,Act:byte);
VAR mystr:string[3];STATIC;
BEGIN
mystr:=IntStr(Act);
SetAPen(PRP,0);
RectFill(PRP,27*Wbr,3*ysize+Nr*2*ysize,34*Wbr,4*ysize+Nr*2*ysize);
SetAPen(PRP,1);
Move(PRP,27*Wbr,3*ysize+baseline+Nr*2*ysize);
gfx:=_Text(PRP,mystr,strlen(mystr));
END;
{--- UP Prefs ---}
PROCEDURE SetProp(Nr,Prop:byte);
BEGIN
SlTags[4]:=TagItem(GTSL_Level,Nr);
GT_SetGadgetAttrsA(Pg[Prop],PWin,NIL,^SLTags[4]);
END;
{--- UP Prefs ---}
PROCEDURE SetCol;
BEGIN
SetAPen(PRP,ActCol);
RectFill(PRP,35*Wbr+4,4*ysize+Round(ysize/2)+2,
39*Wbr-5,6*ysize+Round(ysize/2)-3);
SetNumb(0,ru[ActCol]);
SetNumb(1,gu[ActCol]);
SetNumb(2,bu[ActCol]);
SetProp(ru[ActCol],0);
SetProp(gu[ActCol],1);
SetProp(bu[ActCol],2);
END;
{--- UP Prefs ---}
PROCEDURE StanCols;
BEGIN
ru[0]:=11; gu[0]:=11; bu[0]:=11;
ru[1]:=0; gu[1]:=0; bu[1]:=0;
ru[2]:=15; gu[2]:=15; bu[2]:=15;
ru[3]:=6; gu[3]:=7; bu[3]:=13;
ActCol:=0;
SetCol;
FOR i:=0 TO 3 DO setcolor(i,ru[i],gu[i],bu[i]);
END;
{--- UP Prefs ---}
PROCEDURE LastCols;
BEGIN
FOR i:=0 TO 3 DO
BEGIN
ru[i]:=rr[i];
gu[i]:=gg[i];
bu[i]:=bb[i];
END;
ActCol:=0;
SetCol;
FOR i:=0 TO 3 DO setcolor(i,ru[i],gu[i],bu[i]);
END;
{--- UP Prefs ---}
PROCEDURE CheckIT(nr:byte);
BEGIN
IF Nr=0
THEN
BEGIN
IF nlqUP THEN nlqUP:=false
ELSE nlqUP:=true;
IF nlqUP THEN CBTags[0,2]:=TagItem(GTCB_Checked,ord(true))
ELSE CBTags[0,2]:=TagItem(GTCB_Checked,ord(false));
GT_SetGadgetAttrsA(Pg[12],PWin,NIL,^CBTags[0,2]);
END
ELSE
BEGIN
IF autoUP THEN autoUP:=false
ELSE autoUP:=true;
IF autoUP THEN CBTags[1,2]:=TagItem(GTCB_Checked,ord(true))
ELSE CBTags[1,2]:=TagItem(GTCB_Checked,ord(false));
GT_SetGadgetAttrsA(Pg[13],PWin,NIL,^CBTags[1,2]);
END;
END;
{---- UP Prefs ----}
PROCEDURE benutzen(yho:integer);
BEGIN
FOR i:=0 TO 3 DO rr[i]:=ru[i];
FOR i:=0 TO 3 DO gg[i]:=gu[i];
FOR i:=0 TO 3 DO bb[i]:=bu[i];
nlq:=nlqUP;
auto:=autoUP;
sig:=Pg[14]^.SpecialInfo;
IF yho<>1 THEN message(' Benutze Voreinstellungen');
VAL (sig^.buffer,liRa,yho);
endpr:=true;
END;
{--- UP Prefs ---}
PROCEDURE savecon;
VAR f:text;
BEGIN
benutzen(1);
rewrite(f,'ENVARC:APrint.prefs');
IF IOResult=0
THEN
BEGIN
writeln(f,kenn);
FOR i:=0 TO 3 DO
BEGIN
writeln(f,rr[i]);
writeln(f,gg[i]);
writeln(f,bb[i]);
END;
IF nlqUP THEN writeln(f,'1') ELSE writeln(f,'0');
IF autoUP THEN writeln(f,'1') ELSE writeln(f,'0');
writeln(f,datname);
writeln(f,dirname);
writeln(f,FName);
writeln(f,liRa);
writeln(f,cycleNrC);
close(f);
message(' Konfiguration gespeichert.');
END
ELSE message(' Konnte "Konfiguration" nicht speichern.');
END;
{--- UP Prefs ----}
PROCEDURE Abbruch;
BEGIN
FOR i:=0 TO 3 DO
setcolor(i,rr[i],gg[i],bb[i]);
message(' Prefs abgebrochen...');
endpr:=true;
END;
{---- begin of PREFS ----}
BEGIN
IF nlq THEN nlqUP:=false ELSE nlqUP:=true;
IF auto THEN autoUP:=false ELSE autoUP:=true;
ActCol:=0;
IF nlqUP THEN CBTags[0,2]:=TagItem(GTCB_Checked,ord(true))
ELSE CBTags[0,2]:=TagItem(GTCB_Checked,ord(false));
IF autoUP THEN CBTags[1,2]:=TagItem(GTCB_Checked,ord(true))
ELSE CBTags[1,2]:=TagItem(GTCB_Checked,ord(false));
FOR i:=0 TO 3 DO
BEGIN
ru[i]:=rr[i];
gu[i]:=gg[i];
bu[i]:=bb[i];
END;
PWin:=NIL;
PWin:=openwindowtaglist(nil,^NWPTags[1]);
IF PWin=NIL
THEN
BEGIN message(' Prefs: Kann Prefsfenster nicht öffnen');exit;END;
PRP:=PWin^.RPort;
ourfont:=setfont(PRP,font);
DrawBevelBoxA(PRP,35*Wbr,4*ysize+ROUND(ysize/2),4*Wbr,2*ysize,^BBTags[0]);
FOR i:=0 TO 1 DO
DrawBevelBoxA(PRP,42*Wbr+i*5*Wbr,3*ysize+1,4*Wbr,2*ysize,^BBTags[1]);
FOR i:=0 TO 1 DO
DrawBevelBoxA(PRP,42*Wbr+i*5*Wbr,6*ysize-1,4*Wbr,2*ysize,^BBTags[1]);
GT_RefreshWindow(PWin,NIL);
ITags[2]:=TagItem(GTIN_Number,liRa);
GT_SetGadgetAttrsA(Pg[14],PWin,NIL,^ITags[2]);
SetAPen(PRP,3);
Move(PRP,43*Wbr+round(Wbr/2)+
ROUND((Wbr-textlength(^Screen^.rastport,'1',1))/2),
4*ysize+round(baseline/2));
gfx:=_Text(PRP,'1',1);
SetAPen(PRP,1);
RectFill(PRP,47*Wbr+4,3*ysize+3,51*Wbr-5,5*ysize-2);
SetAPen(PRP,2);SetBPen(PRP,1);
Move(PRP,48*Wbr+round(Wbr/2)+
ROUND((Wbr-textlength(^Screen^.rastport,'2',1))/2),
4*ysize+round(baseline/2));
gfx:=_Text(PRP,'2',1);
SetAPen(PRP,2);
RectFill(PRP,42*Wbr+4,6*ysize+1,46*Wbr-5,8*ysize-4);
SetAPen(PRP,1);SetBPen(PRP,2);
Move(PRP,43*Wbr+round(Wbr/2)+
ROUND((Wbr-textlength(^Screen^.rastport,'3',1))/2),
7*ysize+round(baseline/2)-2);
gfx:=_Text(PRP,'3',1);
SetAPen(PRP,3);
RectFill(PRP,47*Wbr+4,6*ysize+1,51*Wbr-5,8*ysize-4);
SetAPen(PRP,0);SetBPen(PRP,3);
Move(PRP,48*Wbr+round(Wbr/2)+
ROUND((Wbr-textlength(^Screen^.rastport,'4',1))/2),
7*ysize+round(baseline/2)-2);
gfx:=_Text(PRP,'4',1);
SetBPen(PRP,0);
SetCol;
CheckIT(0);
CheckIT(1);
SetPoi(Win);
endpr:=false;
REPEAT
Msg:=Wait_port(PWin^.userport);
Msg:=GT_GetIMsg(PWin^.UserPort);
GT_ReplyIMsg(Msg);
Akt:=Msg^.IAddress;
CASE Msg^.class OF
IDCMP_CLOSEWINDOW: Abbruch;
IDCMP_GADGETUP,IDCMP_GADGETDOWN,IDCMP_MOUSEMOVE:
CASE Akt^.GadgetID OF
0: BEGIN
ru[ActCol]:=Msg^.Code;
SetNumb(0,ru[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
1: BEGIN
gu[ActCol]:=Msg^.Code;
SetNumb(1,gu[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
2: BEGIN
bu[ActCol]:=Msg^.Code;
SetNumb(2,bu[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
3..6: IF ActCol<>Akt^.GadgetID-3
THEN
BEGIN
ActCol:=Akt^.GadgetID-3;
SetCol;
END;
7: StanCols;
8: LastCols;
9: savecon;
10: benutzen(0);
11: abbruch;
12: IF nlqUP THEN nlqUP:=false
ELSE nlqUP:=true;
13: IF autoUP THEN autoUP:=false
ELSE autoUP:=true;
ELSE;END;
IDCMP_RAWKEY:
BEGIN
Code:=Msg^.Code;
CASE (Code AND $7f) OF
$60: IF (Code AND $80)=0
THEN gedr1:=true ELSE gedr1:=false;
$61: IF (Code AND $80)=0
THEN gedr2:=true ELSE gedr2:=false;
ELSE
CASE Msg^.code OF
$01..$04: IF ActCol<>Msg^.Code-1 {1..4}
THEN
BEGIN
ActCol:=Msg^.Code-1;
SetCol;
END;
$22: BEGIN PButton(PWin,Pg[7],1); StanCols; END; {D}
$14: BEGIN PButton(PWin,Pg[8],1); LastCols; END; {T}
$10,
$45, {Q/A/E/ESC}
$20,
$12: BEGIN PButton(PWin,Pg[11],1); Abbruch; END;
$36: CheckIT(0);
$18: CheckIT(1)
$27: StrAkt:=ActivateGadget(Pg[14],PWin,NIL);
$21: BEGIN PButton(PWin,Pg[9],1); savecon; END; {S}
$15: BEGIN PButton(PWin,Pg[10],1); benutzen(0); END; {Z}
$13: BEGIN {R}
yho:=false;
IF (gedr1) OR (gedr2)
THEN
IF ru[ActCol]>0
THEN
BEGIN
DEC(ru[ActCol]);
yho:=true;
END
ELSE {nix}
ELSE
IF ru[ActCol]<15
THEN
BEGIN
INC(ru[ActCol]);
yho:=true;
END;
IF yho
THEN
BEGIN
SetProp(ru[ActCol],0);
SetNumb(0,ru[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
END;
$24: BEGIN {G}
yho:=false;
IF (gedr1) OR (gedr2)
THEN
IF gu[ActCol]>0
THEN
BEGIN
DEC(gu[ActCol]);
yho:=true;
END
ELSE {nix}
ELSE
IF gu[ActCol]<15
THEN
BEGIN
INC(gu[ActCol]);
yho:=true;
END;
IF yho
THEN
BEGIN
SetProp(gu[ActCol],1);
SetNumb(1,gu[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
END;
$35: BEGIN {B}
yho:=false;
IF (gedr1) OR (gedr2)
THEN
IF bu[ActCol]>0
THEN
BEGIN
DEC(bu[ActCol]);
yho:=true;
END
ELSE {nix}
ELSE
IF bu[ActCol]<15
THEN
BEGIN
INC(bu[ActCol]);
yho:=true;
END;
IF yho
THEN
BEGIN
SetProp(bu[ActCol],2);
SetNumb(2,bu[ActCol]);
setcolor(ActCol,ru[ActCol],gu[ActCol],bu[ActCol]);
END;
END;
ELSE;END;
END;
END;
ELSE;END;
UNTIL endpr;
CloseWindow(PWin);
ClearPoi(Win);
END;
{---------------------------------------------------------------------}
PROCEDURE Load;
VAR lo : text;STATIC;
t : string;STATIC;
help : byte;STATIC;
{--V2_11---}
PROCEDURE V2_11;
BEGIN
AllDel;
FOR i:=0 TO 4 DO readln(lo,Abs[i]); {Abs1-5}
i:=1;
REPEAT
readln(lo,ein[i].name1);
readln(lo,ein[i].name2);
readln(lo,ein[i].Nr);
readln(lo,ein[i].Ort);
readln(lo,ein[i].Tel);
readln(lo,ein[i].KZ);
ein[i].kzbr:=textlength(^Screen^.rastport,^ein[i].Kz,strlen(ein[i].kz));
ein[i].frei:=false;
Inc(i);
UNTIL eof(lo);
help:=3;
END;
{---V1_1---}
PROCEDURE V1_1;
BEGIN
AllDel;
readln(lo,Abs[0]); {Abs}
i:=1;
REPEAT
readln(lo,ein[i].name1);
readln(lo,ein[i].name2);
readln(lo,ein[i].Nr);
readln(lo,ein[i].Ort);
readln(lo,ein[i].KZ);
ein[i].kzbr:=textlength(^Screen^.rastport,^ein[i].Kz,strlen(ein[i].kz));
ein[i].frei:=false;
Inc(i);
UNTIL eof(lo);
help:=3;
END;
{--begin of load---}
BEGIN
IF NOT autofirst
THEN RTfile('Anschriften Laden:');
IF (cancel=false) OR (autofirst)
THEN
BEGIN
IF NOT autofirst THEN message(' Lade...');
SetPoi(Win);
help:=0;
reset(lo,datname);
IF IOResult=0
THEN
BEGIN
buffer(lo,10000); {SpeedUPbuffer}
readln(lo,t); {DateiKennung ?}
IF t=dk THEN V1_1
ELSE IF (t=dk2) OR (t=dk3) THEN V2_11
ELSE
BEGIN
help:=1;
close(lo);
END
END
ELSE help:=2;
CASE help OF
1: message(' Keine APrint V1.1 bis V2.21 Datei');
2: message(' Konnte Datei nicht öffnen');
3: BEGIN
STx[6]:=Abs[0];
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
allfree:=false;
IF autofirst THEN autofirst:=false;
close(lo);
wechseln;
message(' Anschrift/-en geladen');
END;
ELSE;END;
ClearPoi(Win);
END
ELSE message(' Ladevorgang abgebrochen.');
END;
{---------------------------------------------------------------------}
PROCEDURE Save;
VAR sa : text;STATIC;
help : byte;STATIC;
outfile : BPTR;STATIC;
ende : long;STATIC;
FUNCTION WriteIT(TOwrite:string):boolean;
VAR strhelp : string;STATIC;
anzahl : long;
BEGIN
strhelp:=TOwrite+chr(10);
anzahl:=DOSWrite(outfile,^strhelp,StrLen(strhelp));
IF anzahl<>StrLen(strhelp)
THEN WriteIt:=false
ELSE WriteIT:=true;
END;
PROCEDURE CloseIT;
BEGIN
ende:=DOSClose(outfile);
ende:=DeleteFile(datname);
IF ende=(-1)
THEN message(' Fehler mit Ausgabedatei --> gelöscht')
ELSE message(' Fehler mit Ausgabedatei / nicht löschbar');
END;
BEGIN
IF NOT allfree
THEN
BEGIN
RTFile('Anschriften Speichern:');
IF not cancel
THEN
BEGIN
Setpoi(Win);
message(' Versuche zu speichern...');
help:=0;
Outfile:=Open(datname,MODE_NEWFILE);
IF Outfile=0
THEN
BEGIN
ende:=DOSClose(outfile);
message(' Konnte Datei nicht öffnen.');
ClearPoi(Win);
exit;
END
ELSE
BEGIN
IF writeIT(dk3)=false
THEN BEGIN CloseIT; ClearPoi(Win);exit;END;
FOR i:=0 TO 4 DO
IF writeIT(Abs[i])=false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
FOR i:=1 TO 50 DO
IF ein[i].frei=false
THEN
BEGIN
IF writeIT(ein[i].name1)=false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
IF writeIT(ein[i].name2)=false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
IF writeIT(ein[i].Nr) =false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
IF writeIT(ein[i].Ort) =false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
IF writeIT(ein[i].Tel) =false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
IF writeIT(ein[i].KZ) =false
THEN BEGIN CloseIT;ClearPoi(Win); exit;END;
END;
ende:=DOSClose(outfile);
message(' Anschriften gespeichert.');
END;
ClearPoi(Win);
END
ELSE message(' Speichern abgebrochen.');
END
ELSE message(' Keine Eintragungen bisher gemacht');
END;
{---------------------------------------------------------------------}
PROCEDURE Sort;
VAR sflag,sor,help : boolean;STATIC;
aust : rec;STATIC;
zahl : byte;STATIC;
PROCEDURE tausch;
BEGIN sflag:=false; aust:=ein[i];ein[i]:=ein[i+1]; ein[i+1]:=aust;END;
BEGIN
IF NOT allfree
THEN
BEGIN
i:=1;
help:=false;
message(' Sortiere...');
SetPoi(Win);
sor:=true;
REPEAT
sflag:=true;
FOR i:=1 TO 49 DO
BEGIN
IF (ein[i].frei) AND (ein[i+1].frei=false)
THEN
BEGIN tausch; IF sor THEN sor:=false; END;
END;
UNTIL sflag;
i:=1;
zahl:=0;
REPEAT IF ein[i].frei THEN zahl:=i;
INC(i);
UNTIL (zahl>0) OR (i=51);
REPEAT
sflag:=true;
FOR i:=1 TO zahl-2 DO
BEGIN
IF ein[i].kz>ein[i+1].kz
THEN
BEGIN tausch; IF sor THEN sor:=false; END
ELSE IF (ein[i].kz=ein[i+1].kz) AND (ein[i].name2>ein[i+1].name2)
THEN BEGIN tausch; IF sor THEN sor:=false; END;
END;
UNTIL sflag;
cycleNrA:=4;
cycleA;
message(' Daten sortiert');
ClearPoi(Win);
END
ELSE message(' Nichts zum sortieren.');
END;
{--------------------------------------------------------------------------}
FUNCTION LoadCon:boolean;
VAR load:text;STATIC;
s:string;STATIC;
p:integer;STATIC;
{--- UP LoadCon ---}
PROCEDURE raus;
BEGIN
Close(Load);
LoadCon:=false;
END;
BEGIN
p:=0;
reset(load,'ENVARC:APrint.prefs');
IF IOResult<>0
THEN BEGIN LoadCon:=false;exit;END;
buffer(load,200);
readln(load,s);
IF s<>Kenn THEN BEGIN raus;exit;END;
FOR i:=0 TO 3 DO
BEGIN
readln(load,s); VAL (s,rr[i],p);
IF (p<>0) OR (rr[i]<0) OR (rr[i]>15) THEN BEGIN raus;exit;END;
readln(load,s); VAL (s,gg[i],p);
IF (p<>0) OR (gg[i]<0) OR (gg[i]>15) THEN BEGIN raus;exit;END;
readln(load,s); VAL (s,bb[i],p);
IF (p<>0) OR (bb[i]<0) OR (bb[i]>15) THEN BEGIN raus;exit;END;
END;
readln(load,s); IF s[1]='1' THEN NLQ:=true
ELSE NLQ:=false;
readln(load,s); IF s[1]='1' THEN auto:=true
ELSE auto:=false;
readln(load,s); IF auto THEN datname:=s ELSE datname:='';
readln(load,s); Dirname:=s;
readln(load,s); FName:=s;
readln(load,s); VAL (s,liRa,p);
IF (p=0) AND (liRa IN [0..40])
THEN ELSE BEGIN raus; exit;END;
readln(load,s); VAL (s,cycleNRC,p);
IF (p=0) AND (cycleNRC IN [0..15])
THEN ELSE BEGIN raus;exit;END;
close(load);
LoadCon:=true;
END;
{--------------------------------------------------------------------}
PROCEDURE ScrError;
BEGIN
CASE errorcode OF
1: RT:=RTReqFirst('APrint V2.21','Oserr-NoMonitor','_Hm');
2: RT:=RTReqFirst('APrint V2.21','Oserr-NoChips','_Hm');
3: RT:=RTReqFirst('APrint V2.21','Oserr-NoMem','_Hm');
4: RT:=RTReqFirst('APrint V2.21','Oserr-NoChipMem','_Hm');
5: RT:=RTReqFirst('APrint V2.21','Oserr-PubNotUnique','_Hm');
6: RT:=RTReqFirst('APrint V2.21','Oserr-UnknownMode','_Hm');
ELSE
RT:=RTReqFirst('APrint V2.21','Error (???)','_Hm');
END;
END;
{-------------------------------------------------------------------}
PROCEDURE brchk;
VAR Wbr2 : cardinal;STATIC;
zei : char;STATIC;
PROCEDURE brcheck(x:char);
BEGIN
Wbr2:=textlength(^PScr^.rastport,x,1);
IF Wbr2>Wbr THEN WBr:=WBr2;
END;
BEGIN
FOR zei:=chr($00) TO chr($5E) DO brcheck(zei);
brcheck('ß');brcheck('Ä');brcheck('Ö');brcheck('Ü');
brcheck(' ');
END;
{--------------------------------------------------------------------}
PROCEDURE ende;
BEGIN
RT:=RTReq('APrint V2.21',
'Programm abbrechen ?','_JA|_Nein',0);
IF RT=1 THEN ex:=true;
END;
{#------------------------------- Main -----------------------------#}
BEGIN
IF NOT V37
THEN
BEGIN
ErrorReq('APrint benötigt OS2 oder höher...','Ja',NIL);
exit;
END;
IF NOT OpenReqtools THEN exit;
PointerPTR:=NIL;
PointerPTR:=PTR(Alloc_Mem(SizeOf(pointerfeld),MEMF_CHIP+MEMF_CLEAR));
IF PointerPTR=NIL THEN BEGIN CloseLibs;exit; END;
PointerPTR^:=Pointerfeld($0000,$0000,$0400,$07c0,$0000,$07c0,$0100,$0380,
$0000,$07e0,$07c0,$1ff8,$1ff0,$3fec,$3ff8,$7fde,
$3ff8,$7fbe,$7ffc,$ff7f,$7efc,$ffff,$7ffc,$ffff,
$3ff8,$7ffe,$3ff8,$7ffe,$1ff0,$3ffc,$07c0,$1ff8,
$0000,$07e0,$0000,$0000,$0000,$03f2,$0000,$0000);
allfree:=true;
IF NOT LoadCon
THEN
BEGIN
Grundeinstellung;
TTx:=' Konnte Konfiguration nicht laden.'
END
ELSE TTx:=' Willkommen zu APrint V2.21';
{---- Init VARs ------------}
FOR i:=1 TO 50 DO ein[i].frei:=true;
cycleNrA:=0;
cycleNrB:=0;
FirstPrt:=true;
FOR i:=0 TO 6 DO STx[i]:='';
FOR i:=0 TO 4 DO Abs[i]:='';
FTags[0]:=TagItem(RTFI_Dir,long(^Dirname));
FTags[1].ti_tag:=Tag_Done;
FOR i:=0 TO 4 DO CTx[i]:=INTSTR(i+1);
FOR i:=0 TO 4 DO cfeld[i]:=^Ctx[i];
cfeld[5]:=NIL;
VTx:=VTxType('...','Brief','Postkarte','Eilsendung','Luftpost',
'Wert','Warensendung','Warensendung # ZERBRECHLICH #',
'Büchersendung','Blindensendung','Einschreiben',
'Eigenhändig','Nachnahme','Gebühr zahlt Empfänger',
'Päckchen'); {15 EA}
FOR i:=0 TO 14 DO
Vfeld[i]:=^Vtx[i];
Vfeld[15]:=NIL;
VTags[0]:=TagItem(GTCY_Active,CycleNrC);
VTags[1]:=TagItem(GTCY_LABELS,long(^vfeld));
VTags[2]:=TagItem(GA_Disabled,ord(false));
VTags[3]:=TagItem(GT_Underscore,ord('_'));
VTags[4].ti_Tag:=Tag_Done;
CTags[0]:=TagItem(GTCY_Active,0);
CTags[1]:=TagItem(GTCY_LABELS,long(^cfeld));
CTags[2]:=TagItem(GA_Disabled,ord(false));
CTags[3].ti_Tag:=Tag_Done;
ITags[0]:=TagItem(GTIN_Maxchars,2);
ITags[1]:=TagItem(GT_Underscore,ord('_'));
ITags[2]:=TagItem(GTIN_Number,liRa);
ITags[3].ti_Tag:=Tag_Done;
{ um APrint schneller zu machen die vielen einzelnen Tags}
CharLen:=CharLenType(35,35,35,35,35,10,60); {Max.Länge für STRGads}
FOR i:=0 TO 5 DO
BEGIN
STags[i,0]:=TagItem(GT_Underscore,ord('_'));
STags[i,1]:=TagItem(GTST_MaxChars,CharLen[i]);
STags[i,2]:=TagItem(GA_TabCycle,ord(true));
STags[i,3]:=TagItem(GTST_String,long(^STx[i]));
STags[i,4]:=TagItem(GA_Disabled,ord(false));
STags[i,5].ti_tag:=Tag_Done;
END;
STags[6,0]:=TagItem(GT_Underscore,ord('_'));
STags[6,1]:=TagItem(GTST_MaxChars,CharLen[6]);;
STags[6,2]:=TagItem(GA_TabCycle,ord(false));
STags[6,3]:=TagItem(GTST_String,long(^STx[6]));
STags[6,4]:=TagItem(GA_Disabled,ord(false));
STags[6,5].ti_tag:=Tag_Done;
GTags[0].ti_Tag:=Tag_Done;
GTags[1]:=TagItem(GA_Disabled,ord(false));
GTags[2]:=TagItem(GT_Underscore,ord('_'));
GTags[3].ti_Tag:=Tag_Done;
NWTags[5] :=Tagitem(wa_activate,ord(true));
NWTags[6] :=Tagitem(wa_backdrop,ord(true));
NWTags[7] :=Tagitem(wa_smartrefresh,ord(true));
NWTags[8] :=Tagitem(wa_rmbtrap,ord(true));
NWTags[9] :=Tagitem(wa_borderless,ord(true));
NWTags[10]:=Tagitem(wa_idcmp,IDCMP_GADGETUP+IDCMP_GADGETDOWN+
IDCMP_MOUSEBUTTONS+IDCMP_RAWKEY);
NWTags[13].ti_tag:=tag_done;
FOR i:=0 TO 1 DO
BEGIN
CBTags[i,0]:=TagItem(GTCB_Scaled,ord(true));
CBTags[i,1]:=TagItem(GT_Underscore,ord('_'));
CBTags[i,3].ti_tag:=tag_done;
END;
SlTags[0]:=TagItem(GA_Immediate,1);
SlTags[1]:=TagItem(GA_Relverify,1);
SlTags[2]:=TagItem(PGA_Freedom,LORIENT_HORIZ);
SlTags[3]:=TagItem(GT_Underscore,ord('_'));
SlTags[4]:=TagItem(GTSL_Level,0);
SlTags[5].ti_tag:=tag_end;
PTitle:='Voreinstellungen:';
NWPTags[5] :=Tagitem(wa_activate,ord(true));
NWPTags[6] :=Tagitem(wa_smartrefresh,ord(true));
NWPTags[7] :=Tagitem(wa_rmbtrap,ord(true));
NWPTags[8] :=Tagitem(wa_title,long(^Ptitle));
NWPTags[9] :=Tagitem(wa_idcmp,IDCMP_GADGETUP+IDCMP_GADGETDOWN+
IDCMP_MOUSEMOVE+IDCMP_RAWKEY+IDCMP_CLOSEWINDOW);
NWPTags[12]:=Tagitem(wa_flags,WFLG_CLOSEGADGET+WFLG_DEPTHGADGET+
WFLG_DRAGBAR);
NWPTags[13].ti_tag:=tag_done;
{---- INIT CustomScreen ----}
Scrtitel:='APrint V2.21 © by PackMAN (Falk Zühlsdorff) 30.11.94';
PScr:=lockpubscreen('Workbench');
drawinfo:=getscreendrawinfo(PScr);
IF drawinfo=NIL
THEN
BEGIN
RT:=RTReqFirst('APrint V2.21','Fehler bei GetScreenDrawInfo',
'_Argh');
CloseLibs;
exit;
END;
font:=drawinfo^.dri_font;
ysize:=font^.tf_ysize;
baseline:=font^.tf_baseline;
Wbr:=0;
brchk;
screen_modeID:=GetVPModeID(^PScr^.ViewPort);
freescreendrawinfo(PScr,drawinfo);
unlockpubscreen(NIL,PScr);
errorcode:=0;
NSTags[1]:=tagitem(sa_left,0);
NSTags[2]:=tagitem(sa_top,0);
NSTags[3]:=tagitem(sa_width,80*Wbr);
NSTags[4]:=tagitem(sa_height,32*ysize);
NSTags[5]:=tagitem(sa_depth,2);
NSTags[6]:=tagitem(sa_pens,long(^tag_col));
NSTags[7]:=tagitem(sa_sysfont,1);
NSTags[8]:=tagitem(sa_type,CUSTOMSCREEN);
NSTags[9]:=tagitem(sa_displayID,screen_modeID);
NSTags[10]:=tagitem(sa_overscan,Oscan_Text);
NSTags[11]:=tagitem(sa_autoscroll,ord(True));
NSTags[12]:=tagitem(sa_behind,ord(True));
NSTags[13]:=tagitem(sa_title,long(^SCRTitel));
NSTags[14]:=tagitem(sa_errorcode,long(^errorcode));
NSTags[15].ti_tag:=tag_done;
tag_col:=tag_col_array(0,1,1,2,1,3,1,0,2,-1);{jetzt hat dopW auch}
{eine Screenleiste}
Screen:=OpenScreenTagList(NIL,^NSTags);
IF Screen=NIL THEN BEGIN ScrError; exit;END;
IF screen^.barheight-2<>ysize THEN {Falls der Screenfont nach dem}
BEGIN {Rechnerstart geändert wurde }
barheight:=screen^.barheight; {und wegen offenem Win nicht }
screenhelp:=CloseScreen(Screen); {gleich total übernommen wird.}
Screen:=NIL;
NSTags[4]:=tagitem(sa_height,31*ysize+barheight-2);
Screen:=OpenScreenTagList(NIL,^NSTags);
IF Screen=NIL THEN BEGIN ScrError; exit;END;
END;
PSCr:=NIL;
PScr:=lockpubscreen(nil); {jetzt cloned screen}
vi:=GetVisualinfoA(PScr,nil);
UnlockPubScreen(NIL,PScr);
Pgad:=NIL;
Pgad:=CreateContext(^Glist);
PPgad:=NIL;
PPgad:=CreateContext(^PGlist);
IF (pgad=nil) OR (PPGad=NIL)
THEN
BEGIN
RT:=RTReqFirst('APrint V2.21','Gadgets nicht vereinbar.',
'_Argh');
screenhelp:=CloseScreen(Screen);
CloseLibs;
exit;
END;
fontname:=drawinfo^.dri_font^.tf_Message.mn_Node.ln_Name;
txattr:=TextAttr(fontname,ysize,0,0);
FOR i:=0 TO 3 DO setcolor(i,rr[i],gg[i],bb[i]);
freibr:=textlength(^Screen^.rastport,'frei',4);
IF Odd(ysize) THEN plus:=-2 ELSE plus:=0;
RTFTags[0]:=TagItem(RT_TextAttr,long(^txattr));
RTFTags[2]:=TagItem(RT_LockWindow,1);
RTFTags[3].ti_tag:=Tag_Done;
BBtags[0]:=TagItem(GTBB_Recessed,1);
BBtags[1]:=TagItem(GT_VisualInfo,long(vi));
BBTags[2].ti_tag:=Tag_End;
ng:=NewGadget(Wbr,ysize,11*Wbr,ysize+6,NIL,^txattr,0,0,vi,nil);
FOR i:=0 TO 9 DO
BEGIN
ng.ng_TopEdge :=1+ysize+(2*i*ysize);
ng.ng_GadgetID :=i;
pgad:=CreateGadgetA(GENERIC_KIND,pgad,^ng,NIL);
g[i]:=pgad;
g[i]^.GadgetType:=GTYP_BOOLGADGET;
g[i]^.Activation:=GACT_RELVERIFY;
g[i]^.Flags:=0;
END;
ng:=NewGadget(Wbr*4,23*ysize+1,5*Wbr,ysize+6,NIL,
^txattr,10,0,vi,nil);
pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^CTags[0]);
g[10]:=pgad;
ng:=NewGadget(Wbr,27*ysize+1,11*Wbr,ysize+6,'So_rtieren',
^txattr,11,PLACETEXT_IN,vi,nil);
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[11]:=pgad;
ng:=NewGadget(Wbr*26,ysize+1,38*Wbr,ysize+6,'1.N_ame:',
^txattr,12,PLACETEXT_LEFT,vi,nil);
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[0]);
g[12]:=pgad;
ng.ng_TopEdge:=3*ysize+1;
ng.ng_GadgetID:=13;
ng.ng_GadgetText:='2.Na_me:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[1]);
g[13]:=pgad;
ng.ng_TopEdge:=5*ysize+1;
ng.ng_GadgetID:=14;
ng.ng_GadgetText:='Stra_ße:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[2]);
g[14]:=pgad;
ng.ng_TopEdge:=7*ysize+1;
ng.ng_GadgetID:=15;
ng.ng_GadgetText:='PLZ/_Ort:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[3]);
g[15]:=pgad;
ng.ng_TopEdge:=9*ysize+1;
ng.ng_GadgetID:=16;
ng.ng_GadgetText:='_Tel:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[4]);
g[16]:=pgad;
ng.ng_TopEdge:=11*ysize+1;
ng.ng_Width:=14*Wbr;
ng.ng_GadgetID:=17;
ng.ng_GadgetText:='_Kürzel:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[5]);
g[17]:=pgad;
ng.ng_TopEdge:=15*ysize+1;
ng.ng_Width:=53*Wbr;
ng.ng_GadgetID:=18;
ng.ng_GadgetText:='A_bs:';
pgad:=CreateGadgetA(STRING_KIND,pgad,^ng,^STags[6]);
g[18]:=pgad;
ng:=NewGadget(14*Wbr,15*ysize+1,5*Wbr,ysize+6,NIL,
^txattr,30,0,vi,nil);
pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^CTags[0]);
g[30]:=pgad;
ng:=NewGadget(Wbr*29,19*ysize+1,35*Wbr,ysize+6,'_Verwendung:',
^txattr,32,PLACETEXT_LEFT,vi,nil);
pgad:=CreateGadgetA(CYCLE_KIND,pgad,^ng,^VTags[0]);
g[32]:=pgad;
ng:=NewGadget(17*Wbr,22*ysize+1,11*Wbr,ysize+6,'L_öschen',
^txattr,19,PLACETEXT_IN,vi,nil);
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[19]:=pgad;
ng.ng_LeftEdge:=29*Wbr;
ng.ng_GadgetID:=20;
ng.ng_GadgetText:='_Neu';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[20]:=pgad;
ng.ng_LeftEdge:=41*Wbr;
ng.ng_GadgetID:=21;
ng.ng_GadgetText:='_Laden';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[21]:=pgad;
ng.ng_LeftEdge:=53*Wbr;
ng.ng_GadgetID:=22;
ng.ng_GadgetText:='_Speichern';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[22]:=pgad;
ng.ng_LeftEdge:=65*Wbr;
ng.ng_GadgetID:=23;
ng.ng_GadgetText:='Pre_fs';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[23]:=pgad;
ng.ng_LeftEdge:=17*Wbr;
ng.ng_TopEdge:=24*ysize+1;
ng.ng_GadgetID:=24;
ng.ng_GadgetText:='_Info';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[24]:=pgad;
ng.ng_LeftEdge:=29*Wbr;
ng.ng_GadgetID:=25;
ng.ng_GadgetText:='_Hilfe';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[25]:=pgad;
ng.ng_LeftEdge:=41*Wbr;
ng.ng_GadgetID:=26;
ng.ng_GadgetText:='_Drucken';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[26]:=pgad;
ng.ng_LeftEdge:=53*Wbr;
ng.ng_GadgetID:=27;
ng.ng_GadgetText:='List_Print';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[27]:=pgad;
ng.ng_LeftEdge:=65*Wbr;
ng.ng_GadgetID:=28;
ng.ng_GadgetText:='_Ende';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[28]:=pgad;
ng.ng_LeftEdge:=53*Wbr;
ng.ng_TopEdge:=11*ysize+1;
ng.ng_GadgetID:=29;
ng.ng_GadgetText:='_Copy';
pgad:=CreateGadgetA(BUTTON_KIND,pgad,^ng,^GTags[1]);
g[29]:=pgad;
TTags[0]:=TagItem(GTTX_Border,ord(true));
TTags[1]:=TagItem(GTTX_Justification,GTJ_CENTER);
TTags[2]:=TagItem(GTTX_Text,long(^TTx));
TTags[3].ti_Tag:=Tag_Done;
ng.ng_TopEdge:=27*ysize+1;
ng.ng_LeftEdge:=26*Wbr;
ng.ng_GadgetID:=31;
ng.ng_GadgetText:='Status:';
ng.ng_Width:=53*Wbr;
ng.ng_Flags:=PLACETEXT_LEFT;
pgad:=CreateGadgetA(TEXT_KIND,pgad,^ng,^TTags[0]);
g[31]:=pgad;
ng.ng_LeftEdge:=10*Wbr;
ng.ng_Width:=15*Wbr;
ng.ng_Height:=ysize;
FOR i:=0 TO 2 DO
BEGIN
ng.ng_TopEdge:=3*ysize+(i*2*Ysize);
ng.ng_GadgetID:=i;
CASE i OF
0: ng.ng_GadgetText:='_R';
1: ng.ng_GadgetText:='_G';
2: ng.ng_GadgetText:='_B';
ELSE;END;
Ppgad:=CreateGadgetA(SLIDER_KIND,Ppgad,^ng,^SlTags[0]);
Pg[i]:=Ppgad;
END;
ng.ng_TopEdge:=3*ysize+2;
ng.ng_Width:=4*Wbr-4;
ng.ng_Height:=2*ysize-2;
ng.ng_GadgetText:='';
ng.ng_Flags:=0;
FOR i:=0 TO 1 DO
BEGIN
ng.ng_LeftEdge:=42*Wbr+i*5*Wbr+2;
ng.ng_GadgetID:=i+3;
Ppgad:=CreateGadgetA(GENERIC_KIND,Ppgad,^ng,NIL);
Pg[i+3]:=Ppgad;
Pg[i+3]^.GadgetType:=GTYP_BOOLGADGET;
Pg[i+3]^.ACTIVATION:=GACT_RELVERIFY;
Pg[i+3]^.Flags :=GFLG_GADGHBOX;
END;
ng.ng_TopEdge:=6*ysize;
FOR i:=0 TO 1 DO
BEGIN
ng.ng_LeftEdge:=42*Wbr+i*5*Wbr+2;
ng.ng_GadgetID:=i+5;
Ppgad:=CreateGadgetA(GENERIC_KIND,Ppgad,^ng,NIL);
Pg[i+5]:=Ppgad;
Pg[i+5]^.GadgetType:=GTYP_BOOLGADGET;
Pg[i+5]^.ACTIVATION:=GACT_RELVERIFY;
Pg[i+5]^.Flags :=GFLG_GADGHBOX;
END;
ng:=NewGadget(14*Wbr,10*ysize,11*Wbr,ysize+6,'Stan_dard',
^txattr,7,PLACETEXT_IN,vi,nil);
Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
Pg[7]:=Ppgad;
ng.ng_LeftEdge:=35*Wbr;
ng.ng_GadgetID:=8;
ng.ng_GadgetText:='Rückse_tzen';
Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
Pg[8]:=Ppgad;
ng.ng_TopEdge:=21*ysize-ROUND(Wbr/2);
ng.ng_LeftEdge:=11*Wbr;
ng.ng_GadgetID:=9;
ng.ng_GadgetText:='_Speichern';
Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
Pg[9]:=Ppgad;
ng.ng_LeftEdge:=25*Wbr-ROUND(Wbr/2);
ng.ng_GadgetID:=10;
ng.ng_GadgetText:='Benut_zen';
Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
Pg[10]:=Ppgad;
ng.ng_LeftEdge:=39*Wbr-ROUND(Wbr/2);
ng.ng_GadgetID:=11;
ng.ng_GadgetText:='_Abbruch';
Ppgad:=CreateGadgetA(BUTTON_KIND,Ppgad,^ng,^GTags[1]);
Pg[11]:=Ppgad;
ng:=NewGadget(11*Wbr,16*ysize,ROUND((ysize+3)*(26/11)),ysize+3
,'_NLQ',^txattr,12,PLACETEXT_ABOVE,vi,nil);
Ppgad:=CreateGadgetA(CHECKBOX_KIND,Ppgad,^ng,^CBTags[0]);
Pg[12]:=Ppgad;
ng.ng_LeftEdge:=46*Wbr;
ng.ng_GadgetID:=13;
ng.ng_GadgetText:='Aut_oLoad';
Ppgad:=CreateGadgetA(CHECKBOX_KIND,Ppgad,^ng,^CBTags[1]);
Pg[13]:=Ppgad;
ng.ng_Height:=ysize+6;
ng.ng_Width:=5*Wbr;
ng.ng_LeftEdge:=27*Wbr+ROUND(Wbr/2);
ng.ng_GadgetID:=14;
ng.ng_GadgetText:='lin_ker Rand';
Ppgad:=CreateGadgetA(INTEGER_KIND,Ppgad,^ng,^ITags);
Pg[14]:=Ppgad;
NWTags[1] :=Tagitem(wa_left,0);
NWTags[2] :=Tagitem(wa_top,screen^.barheight+1);
NWTags[3] :=Tagitem(wa_width,80*Wbr);
NWTags[4] :=Tagitem(wa_height,31*ysize-3);
NWTags[11]:=Tagitem(wa_CustomScreen,long(Screen));
NWTags[12]:=Tagitem(wa_Gadgets,long(glist));
NWPTags[1] :=Tagitem(wa_left,10*Wbr);
NWPTags[2] :=Tagitem(wa_top,screen^.barheight+1+2*ysize);
NWPTags[3] :=Tagitem(wa_width,60*Wbr);
NWPTags[4] :=Tagitem(wa_height,25*ysize);
NWPTags[10]:=Tagitem(wa_CustomScreen,long(Screen));
NWPTags[11]:=Tagitem(wa_Gadgets,long(Pglist));
Win:=openwindowtaglist(nil,^NWTags[1]);
IF Win=NIL
THEN
BEGIN
RT:=RTReqFirst('APrint V2.21','Hauptfenster nicht zu öffnen',
'_Argh');
screenhelp:=CloseScreen(Screen);
CloseLibs;
exit;
END;
RP:=Win^.RPort;
ourfont:=setfont(RP,font);
PrcH:=FindTask(Nil);
Prc:=PrcH;
OWin:=Prc^.pr_WindowPtr;
Prc^.pr_WindowPtr:=WIN;
GT_RefreshWindow(WIN,NIL);
FOR i:=0 TO 9 DO
BEGIN
DrawBevelBoxA(RP,Wbr+1,ysize+1+(i*2*ysize),
11*Wbr-1,ysize+6,^BBTags[1]);
END;
SetAPen(RP,2);
Move(RP,13*Wbr,0);
Draw(RP,13*Wbr,31*ysize-3);
SetAPen(RP,1);
Move(RP,13*Wbr-1,0);
Draw(RP,13*Wbr-1,31*ysize-3);
SetAPen(RP,2);
Move(RP,13*Wbr,14*ysize);
Draw(RP,80*Wbr-2,14*ysize);
Move(RP,13*Wbr,18*ysize);
Draw(RP,80*Wbr-2,18*ysize);
SetAPen(RP,1);
Move(RP,13*Wbr+1,14*ysize-1);
Draw(RP,80*Wbr,14*ysize-1);
Move(RP,13*Wbr+1,18*ysize-1);
Draw(RP,80*Wbr,18*ysize-1);
DrawBevelBoxA(RP,0,0,80*Wbr,31*ysize-3,^BBTags[1]);
ScreenToFront(SCREEN);
{--- Normal Work ----}
wechseln;
IF (auto) and (datname<>'') THEN
BEGIN autofirst:=true;
message(' AutoLoad-Modus. Bitte warten Lade...');
load;
END;
autofirst:=false;
ex:=false;
REPEAT
Msg:=Wait_Port(Win^.UserPort);
Msg:=GT_GetIMsg(WIN^.UserPort);
GT_ReplyIMsg(Msg);
Akt:=Msg^.IAddress;
CASE Msg^.class OF
IDCMP_GADGETUP:
CASE Akt^.GadgetID OF
0..9: Ausgabe(Akt^.GadgetID+1);
10: BEGIN CycleNrA:=Msg^.Code; wechseln;END;
11: sort;
12..16: StrAkt:=ActivateGadget(g[Akt^.GadgetID+1],WIN,NIL);
19: BEGIN loeschen;
message(' Eintrag gelöscht.');END;
20: neu;
21: load;
22: save;
23: prefs;
24: InfoLine;
25: HelpLine;
26: Drucken(0);
27: Drucken(1);
28: ende;
29: KopDel(1);
30: BEGIN
sig:=g[18]^.SpecialInfo;
Abs[cycleNrB]:=sig^.buffer;
CycleNrB:=Msg^.Code;
STx[6]:=Abs[cycleNrB];
GT_SetGadgetAttrsA(g[18],WIN,NIL,^STags[6,3]);
END;
32: CycleNrC:=Msg^.Code;
ELSE;END;
IDCMP_RAWKEY:
BEGIN
Code:=Msg^.Code;
CASE (Code AND $7f) OF
$60: IF (Code AND $80)=0
THEN gedr1:=true ELSE gedr1:=false;
$61: IF (Code AND $80)=0
THEN gedr2:=true ELSE gedr2:=false;
ELSE
CASE Msg^.code OF
$11: cycleA; {W @}
$20: StrAkt:=ActivateGadget(g[12],WIN,NIL); {A}
$37: StrAkt:=ActivateGadget(g[13],WIN,NIL); {M}
$0B: StrAkt:=ActivateGadget(g[14],WIN,NIL); {ß}
$18: StrAkt:=ActivateGadget(g[15],WIN,NIL); {O}
$27: StrAkt:=ActivateGadget(g[17],WIN,NIL); {K}
$35: StrAkt:=ActivateGadget(g[18],WIN,NIL); {B}
$14: StrAkt:=ActivateGadget(g[16],WIN,NIL); {T}
$32: cycleB; {X @}
$17: BEGIN PButton(Win,g[24],1); InfoLine; {I} END;
$19: BEGIN PButton(Win,g[27],1); Drucken(1); {P} END;
$25: BEGIN PButton(Win,g[25],1); HelpLine; {H} END;
$36: BEGIN PButton(Win,g[20],1); Neu; {N} END;
$21: BEGIN PButton(Win,g[22],1); save; {S} END;
$22: BEGIN PButton(Win,g[26],1); Drucken(0); {D} END;
$28: BEGIN PButton(Win,g[21],1); load; {L} END;
$13: BEGIN PButton(Win,g[11],1); sort; {O} END;
$12,
$45: BEGIN PButton(Win,g[28],1); ende; {E} END;
$33: BEGIN PButton(Win,g[29],1); KopDel(1); {C} END;
$34: cycleC;
$29: BEGIN PButton(Win,g[19],1); loeschen; {Ö}
message(' Eintrag gelöscht.'); END;
$01..$0A: BEGIN PButton(Win,g[long(Msg^.Code-1)],0);
Ausgabe(long(Code)); END;
$23: BEGIN PButton(Win,g[23],1); Prefs; {F} END;
ELSE;END;
END;
END;
ELSE;END;
UNTIL ex;
Prc^.pr_WindowPtr:=OWin;
CloseSome;
END.